﻿///<reference path="../../../Scripts/jquery-1.4.1-vsdoc.js"/>
///<reference path="utils.js"/>

var styles = new Dictionary();
var isMozilla = $.browser.msie == undefined;

//xml->html
function TransformNode(node, path) {


    var style;

    if (styles.Lookup(path) == null) {
        style = appPointer.ServerManager.GetCoreItem(path);
        styles.Add(path, style);
    }
    else {
        style = styles.Lookup(path);
    }

    var transformedNode;
    try {
        transformedNode = isMozilla ? TransformNodeInMozilla(node, style) : TransformNodeInIE(node, style);
    }
    catch (e) {  // значит была запомнена null-евая версия полученная в результате сбоя сети.

        style = appPointer.ServerManager.GetCoreItem(path);

        styles.Delete(path);   // удаляем её
        styles.Add(path, style);   // и запоминаем свежую

        transformedNode = isMozilla ? TransformNodeInMozilla(node, style) : TransformNodeInIE(node, style);
    }

    return transformedNode;
}

function TransformNodeInIE(node, style) {
    return node.transformNode(style);

//    var template = new ActiveXObject("MSXML2.XSLTemplate");
//    template.stylesheet = style;
//    var proc = template.createProcessor();
//    proc.input = node;
//    if (parameters != undefined) {
//        for (var i = 0; i < parameters.length; i++) {
//            var parm = parameters[i];
//            proc.addParameter(parm.name, parm.value, "");
//        }
//    }
//    proc.transform();
//    //    return proc.output; 

//        var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0"); 
//        var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); 
//        var xslproc; 
//        xsldoc.async = false; 
//        xsldoc.loadXML(style.xml);
//        if (xsldoc.parseError.errorCode != 0) {
//            var myErr = xsldoc.parseError;
//            alert("You have error " + myErr.reason);
//        }
//        else {
//            xslt.stylesheet = xsldoc;
//            var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
//            xmldoc.async = false;
//            xmldoc.loadXML(node.xml);
//            if (xmldoc.parseError.errorCode != 0) {
//                var myErr = xmldoc.parseError;
//                alert("You have error " + myErr.reason);
//            }
//            else {
//                xslproc = xslt.createProcessor();
//                xslproc.input = xmldoc;
//                if (parameter != undefined) {                    
//                        xslproc.addParameter(parameter.name, parameter.value);                    
//                }
//                xslproc.transform();         
//            }
//        }

//        return xslproc.output; 
}

function TransformNodeInMozilla(node, style, parameters) {
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(style);

    var resultDocument = xsltProcessor.transformToDocument(node);    

    return SerializeXmlNode(resultDocument);
}


function SerializeXmlNode(xmlNode) {
    if (isMozilla) {
        var serializer = new XMLSerializer();
        var xml = serializer.serializeToString(xmlNode);
        return xml.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" ?>");
    }
    else
        return xmlNode.xml;
}